The levels in Sokoban 3D are organized into sets. Each set that isn't built in to the game has its own set file. I haven't yet written a level editor but if you're handy with ResEdit, you can make your own set files.
The set files consist of two resource types:
•The first is a standard 'TEXT' resource type which contains a bunch of text resources -- one for each level. You can (optionally) give each 'TEXT' resource a name which will be used as the name of the level by Sokoban 3D. The 'TEXT' resources are layed out according to the standard Sokoban level file format which uses ASCII characters to represent floors, walls, boxes, etc. See below for a description of this layout.
•The second resource type is the 'SETs' resource type which gives the name of the set and the resource ID's of the first and last levels. These resource ID's refer to the ID's of the corresponding 'TEXT' resources. A ResEdit template for the 'SETs' resource can be found in the Sokoban 3D game. The 'SETs' resource itself should have an ID of 128 and there should only be one 'SETs' resource per set file.
The set file should have a creator of 'Sk3d' and a type of 'Sets'.
Once you've succesfully made a set file and double-checked it against the information given here, drag it into the "Sets ƒ" folder in Sokoban 3D. The next time you start Sokoban, it should appear in the "Sets" menu.
Making Levels
Here's the layout of the TEXT resources that specify each level. This is a standard layout used by most implementations of Sokoban.
Each "cell" in the level (each square in the grid when viewed from the top-down as, e.g. in the "Map Mode" in Sokoban 3D), is represented by a single ASCII character. These characters are organized into lines separated by return characters. The top-most line refers to the top-most row of squares in the grid and so on.
The ASCII character codes are as follows:
' ' (space): Floor
'#' (pound): Wall
'$' (dollar sign): Box
'.' (period): Pallette
'@' ("at" symbol): Player
'*' (asterisk): Box on a pallette
'+': (plus): Player on a pallette
There must only be one player per level (either '@' or '+'). The level playing area should be completely surrounded by walls. The number of rows should bot exceed 32 and neither should the number of columns.
Here's an example (this is the first level from the original set of 50 levels):
#####
# #
#$ #
### $##
# $ $ #
### # ## # ######
# # ## ##### ..#
# $ $ ..#
##### ### #@## ..#
# #########
#######
Notice that you don't need to add spaces to the end of a row if you've reached the end of the board but you must add spaces to the beginning to make sure everything lines up correctly.
When you add the 'TEXT' resource to ResEdit, it might be confusing since it may use a variable-width font. For instance, the above example could look like:
#####
# #
#$ #
### $##
# $ $ #
### # ## # ######
# # ## ##### ..#
# $ $ ..#
##### ### #@## ..#
# #########
#######
So it's probably best to design your levels in a fixed-width font like Monaco or Courier and then import them to ResEdit by copying and pasting.